/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufrn.cerescaico.sepe.dao;

import br.ufrn.cerescaico.sepe.Sepe;
import br.ufrn.cerescaico.sepe.beans.Trabalho;
import br.ufrn.cerescaico.sepe.dao.util.DataAccessLayerException;
import br.ufrn.cerescaico.sepe.dao.util.HibernateFactory;
import br.ufrn.cerescaico.sepe.dao.util.PagerBean;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Projections;

/**
 * Classe de dados do bean trabalho.
 * @author Taciano Morais Silva
 * @version 20/08/2010, 12h11m
 * @since 20/08/2010, 12h00m
 */
public class TrabalhoDao extends AbstractDao<Trabalho> implements Dao<Trabalho> {

    public TrabalhoDao(Sepe sepe) throws DataAccessLayerException {
        super(sepe);
    }

    /**
     *
     * @throws DataAccessLayerException
     */
    public TrabalhoDao() throws DataAccessLayerException {
        super();
    }

    /**
     * Insert a new Event into the database.
     * @param event
     */
    @Override
    public void create(Trabalho trabalho) throws DataAccessLayerException {
        super.saveOrUpdate(trabalho);
    }

    @Override
    public void update(Trabalho trabalho) throws DataAccessLayerException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void delete(Integer id) throws DataAccessLayerException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * Delete a detached Event from the database.
     * @param event
     */
    @Override
    public void delete(Trabalho trabalho) throws DataAccessLayerException {
        super.delete(trabalho);
    }

    @Override
    public Trabalho find(Integer id) throws DataAccessLayerException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Trabalho> findAll() throws DataAccessLayerException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Trabalho> listar(PagerBean pager) throws DataAccessLayerException {
        List<Trabalho> trabalhos = null;
        try {
            startOperation();
            Criteria criteria = session.createCriteria(Trabalho.class);
            Criteria count = session.createCriteria(Trabalho.class);

            //projeção para a contagem de registros
            count.setProjection(Projections.rowCount());
            Object obj = count.uniqueResult();
            int total = ((Long) count.uniqueResult()).intValue();
            pager.setTotalResults(total);

            //setando os falores do primeiro registro e do número máximo de registros.
            criteria.setFirstResult(pager.getFirstResult());
            criteria.setMaxResults(pager.getMaxResults());
            trabalhos = (List<Trabalho>) criteria.list();
            tx.commit();
        } catch (HibernateException e) {
            handleException(e);
        } finally {
            HibernateFactory.close(session);
        }
        return trabalhos;
    }
}
